package com.example.demo.controller;

import com.example.demo.Server.UnsafeLoginServer;
import com.example.demo.entity.User;
import com.example.demo.result.Result;
import com.example.demo.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@Slf4j
public class Unsafe_Login_Controller {

    @Autowired
    private UnsafeLoginServer unsafeLoginServer;

    // 不安全的登录接口，存在SQL注入漏洞
    @PostMapping("/User_unsafe_login")
    public Result<User> unsafeLogin(@RequestBody Map<String, String> loginData) {
        log.info("不安全登录接口被调用，接收到的数据: {}", loginData);
        
        String account = loginData.get("account");
        String password = loginData.get("password");
        
        log.info("接收到的账号: {}, 密码: {}", account, password);
        
        try {
            // 调用存在SQL注入漏洞的登录方法 - 现在返回List<User>
            List<User> users = unsafeLoginServer.unsafeLogin(account, password);
            
            log.info("SQL查询后返回的用户列表数量: {}", users != null ? users.size() : 0);
            
            // 登录成功处理：只要返回了用户列表且不为空，就认为登录成功
            if (users != null && !users.isEmpty()) {
                // 选择第一个用户（通常SQL注入会返回多个用户）
                User loginUser = users.get(0);
                Map<String, Object> claims = new HashMap<>();
                claims.put("id", loginUser.getUserID());
                claims.put("role", "USER"); // 添加角色标识
                
                String jwt = JwtUtils.generateJwt(claims);
                loginUser.setToken(jwt);
                
                // 如果返回多个用户，记录一个SQL注入可能成功的警告日志
                if (users.size() > 1) {
                    log.warn("可能存在SQL注入攻击！查询返回了{}条用户记录");
                }
                
                log.info("登录成功，生成JWT令牌");
                return Result.success(loginUser);
            } else {
                log.info("登录失败：未找到用户");
                return Result.error("登录失败");
            }
        } catch (Exception e) {
            log.error("不安全登录过程中发生异常: {}", e.getMessage(), e);
            return Result.error("登录过程中发生异常: " + e.getMessage());
        }
    }

    // 不安全的注册接口，明文存储密码
    @PostMapping("/User_unsafe_register")
    public Result unsafeRegister(@RequestBody Map<String, String> registerData) {
        String account = registerData.get("account");
        String password = registerData.get("password");
        
        // 调用明文存储密码的注册方法
        int result = unsafeLoginServer.unsafeRegister(account, password);
        
        if (result > 0) {
            return Result.success();
        }
        
        return Result.error("注册失败");
    }
}